Prosper Loan Data EDA

by MA, Tianxiang

========================================================

本项目主要分析来自Prosper的历史贷款数据(2006-2014)。此数据集包含 113,937 项贷款,每项贷款有 81 个变量,包括贷款⾦额、借款利率(或利率)、当前贷款状态、借款⼈收⼊、借款⼈就业状态、借款⼈信⽤历史及最新⽀付信息。

## 'data.frame':    113937 obs. of  81 variables:
##  $ ListingKey                         : Factor w/ 113066 levels "00003546482094282EF90E5",..: 7180 7193 6647 6669 6686 6689 6699 6706 6687 6687 ...
##  $ ListingNumber                      : int  193129 1209647 81716 658116 909464 1074836 750899 768193 1023355 1023355 ...
##  $ ListingCreationDate                : Factor w/ 113064 levels "2005-11-09 20:44:28.847000000",..: 14184 111894 6429 64760 85967 100310 72556 74019 97834 97834 ...
##  $ CreditGrade                        : Factor w/ 9 levels "","A","AA","B",..: 5 1 8 1 1 1 1 1 1 1 ...
##  $ Term                               : int  36 36 36 36 36 60 36 36 36 36 ...
##  $ LoanStatus                         : Ord.factor w/ 12 levels "Cancelled"<"Completed"<..: 2 4 2 4 4 4 4 4 4 4 ...
##  $ ClosedDate                         : Factor w/ 2803 levels "","2005-11-25 00:00:00",..: 1138 1 1263 1 1 1 1 1 1 1 ...
##  $ BorrowerAPR                        : num  0.165 0.12 0.283 0.125 0.246 ...
##  $ BorrowerRate                       : num  0.158 0.092 0.275 0.0974 0.2085 ...
##  $ LenderYield                        : num  0.138 0.082 0.24 0.0874 0.1985 ...
##  $ EstimatedEffectiveYield            : num  NA 0.0796 NA 0.0849 0.1832 ...
##  $ EstimatedLoss                      : num  NA 0.0249 NA 0.0249 0.0925 ...
##  $ EstimatedReturn                    : num  NA 0.0547 NA 0.06 0.0907 ...
##  $ ProsperRating..numeric.            : int  NA 6 NA 6 3 5 2 4 7 7 ...
##  $ ProsperRating..Alpha.              : Factor w/ 8 levels "","A","AA","B",..: 1 2 1 2 6 4 7 5 3 3 ...
##  $ ProsperScore                       : num  NA 7 NA 9 4 10 2 4 9 11 ...
##  $ ListingCategory..numeric.          : int  0 2 0 16 2 1 1 2 7 7 ...
##  $ BorrowerState                      : Factor w/ 52 levels "","AK","AL","AR",..: 7 7 12 12 25 34 18 6 16 16 ...
##  $ Occupation                         : Factor w/ 68 levels "","Accountant/CPA",..: 37 43 37 52 21 43 50 29 24 24 ...
##  $ EmploymentStatus                   : Factor w/ 9 levels "","Employed",..: 9 2 4 2 2 2 2 2 2 2 ...
##  $ EmploymentStatusDuration           : int  2 44 NA 113 44 82 172 103 269 269 ...
##  $ IsBorrowerHomeowner                : Factor w/ 2 levels "False","True": 2 1 1 2 2 2 1 1 2 2 ...
##  $ CurrentlyInGroup                   : Factor w/ 2 levels "False","True": 2 1 2 1 1 1 1 1 1 1 ...
##  $ GroupKey                           : Factor w/ 707 levels "","00343376901312423168731",..: 1 1 335 1 1 1 1 1 1 1 ...
##  $ DateCreditPulled                   : Factor w/ 112992 levels "2005-11-09 00:30:04.487000000",..: 14347 111883 6446 64724 85857 100382 72500 73937 97888 97888 ...
##  $ CreditScoreRangeLower              : int  640 680 480 800 680 740 680 700 820 820 ...
##  $ CreditScoreRangeUpper              : int  659 699 499 819 699 759 699 719 839 839 ...
##  $ FirstRecordedCreditLine            : Factor w/ 11586 levels "","1947-08-24 00:00:00",..: 8639 6617 8927 2247 9498 497 8265 7685 5543 5543 ...
##  $ CurrentCreditLines                 : int  5 14 NA 5 19 21 10 6 17 17 ...
##  $ OpenCreditLines                    : int  4 14 NA 5 19 17 7 6 16 16 ...
##  $ TotalCreditLinespast7years         : int  12 29 3 29 49 49 20 10 32 32 ...
##  $ OpenRevolvingAccounts              : int  1 13 0 7 6 13 6 5 12 12 ...
##  $ OpenRevolvingMonthlyPayment        : num  24 389 0 115 220 1410 214 101 219 219 ...
##  $ InquiriesLast6Months               : int  3 3 0 0 1 0 0 3 1 1 ...
##  $ TotalInquiries                     : num  3 5 1 1 9 2 0 16 6 6 ...
##  $ CurrentDelinquencies               : int  2 0 1 4 0 0 0 0 0 0 ...
##  $ AmountDelinquent                   : num  472 0 NA 10056 0 ...
##  $ DelinquenciesLast7Years            : int  4 0 0 14 0 0 0 0 0 0 ...
##  $ PublicRecordsLast10Years           : int  0 1 0 0 0 0 0 1 0 0 ...
##  $ PublicRecordsLast12Months          : int  0 0 NA 0 0 0 0 0 0 0 ...
##  $ RevolvingCreditBalance             : num  0 3989 NA 1444 6193 ...
##  $ BankcardUtilization                : num  0 0.21 NA 0.04 0.81 0.39 0.72 0.13 0.11 0.11 ...
##  $ AvailableBankcardCredit            : num  1500 10266 NA 30754 695 ...
##  $ TotalTrades                        : num  11 29 NA 26 39 47 16 10 29 29 ...
##  $ TradesNeverDelinquent..percentage. : num  0.81 1 NA 0.76 0.95 1 0.68 0.8 1 1 ...
##  $ TradesOpenedLast6Months            : num  0 2 NA 0 2 0 0 0 1 1 ...
##  $ DebtToIncomeRatio                  : num  0.17 0.18 0.06 0.15 0.26 0.36 0.27 0.24 0.25 0.25 ...
##  $ IncomeRange                        : Ord.factor w/ 8 levels "Not employed"<..: 4 5 8 4 7 7 4 4 4 4 ...
##  $ IncomeVerifiable                   : Factor w/ 2 levels "False","True": 2 2 2 2 2 2 2 2 2 2 ...
##  $ StatedMonthlyIncome                : num  3083 6125 2083 2875 9583 ...
##  $ LoanKey                            : Factor w/ 113066 levels "00003683605746079487FF7",..: 100337 69837 46303 70776 71387 86505 91250 5425 908 908 ...
##  $ TotalProsperLoans                  : int  NA NA NA NA 1 NA NA NA NA NA ...
##  $ TotalProsperPaymentsBilled         : int  NA NA NA NA 11 NA NA NA NA NA ...
##  $ OnTimeProsperPayments              : int  NA NA NA NA 11 NA NA NA NA NA ...
##  $ ProsperPaymentsLessThanOneMonthLate: int  NA NA NA NA 0 NA NA NA NA NA ...
##  $ ProsperPaymentsOneMonthPlusLate    : int  NA NA NA NA 0 NA NA NA NA NA ...
##  $ ProsperPrincipalBorrowed           : num  NA NA NA NA 11000 NA NA NA NA NA ...
##  $ ProsperPrincipalOutstanding        : num  NA NA NA NA 9948 ...
##  $ ScorexChangeAtTimeOfListing        : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ LoanCurrentDaysDelinquent          : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ LoanFirstDefaultedCycleNumber      : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ LoanMonthsSinceOrigination         : int  78 0 86 16 6 3 11 10 3 3 ...
##  $ LoanNumber                         : int  19141 134815 6466 77296 102670 123257 88353 90051 121268 121268 ...
##  $ LoanOriginalAmount                 : int  9425 10000 3001 10000 15000 15000 3000 10000 10000 10000 ...
##  $ LoanOriginationDate                : Factor w/ 1873 levels "2005-11-15 00:00:00",..: 426 1866 260 1535 1757 1821 1649 1666 1813 1813 ...
##  $ LoanOriginationQuarter             : Ord.factor w/ 33 levels "Q1 2006"<"Q2 2006"<..: 7 33 5 28 31 32 30 30 32 32 ...
##  $ MemberKey                          : Factor w/ 90831 levels "00003397697413387CAF966",..: 11071 10302 33781 54939 19465 48037 60448 40951 26129 26129 ...
##  $ MonthlyLoanPayment                 : num  330 319 123 321 564 ...
##  $ LP_CustomerPayments                : num  11396 0 4187 5143 2820 ...
##  $ LP_CustomerPrincipalPayments       : num  9425 0 3001 4091 1563 ...
##  $ LP_InterestandFees                 : num  1971 0 1186 1052 1257 ...
##  $ LP_ServiceFees                     : num  -133.2 0 -24.2 -108 -60.3 ...
##  $ LP_CollectionFees                  : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ LP_GrossPrincipalLoss              : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ LP_NetPrincipalLoss                : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ LP_NonPrincipalRecoverypayments    : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ PercentFunded                      : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ Recommendations                    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ InvestmentFromFriendsCount         : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ InvestmentFromFriendsAmount        : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Investors                          : int  258 1 41 158 20 1 1 1 1 1 ...

单变量绘图选择

业务量增长趋势
  • 从时间轴上看,,Prosper的业务以2009年为界明显分为两段,中间应该是经历了业务调整,从06年开始的增长趋势中断,贷款业务暂停;从2009-07-01开始,新业务重新启动,并呈指数型增长。
  • 因为前后两部分贷款数据可能存在各方面的差异(风控标准、贷款质量、客户群体,等),后续主要研究2009-07-01之后的数据;

贷款质量总体分布

从贷款状态分布来看,绝大部分贷款都属于正常状态,少数出现还款逾期;累计来看,少数贷款出现违约和坏账的情况。

贷款额度、预期收益分布
  • 贷款额度在1000到35000之间,额度越小分布越多;在5000的整数倍额度分布普遍比其他金额多;
  • 贷款利率主要分布在0.04到0.36;
  • 预期收益大部分集中在0.05到0.2之间,存在少数预期收益为负的贷款;
  • 预期损失大多集中在0.2以下,但有极少数的预期损失达到0.366;

贷款人特征:收入、按时还款率、第三方信用分
  • 月收入分布接近幂律分布,大多数借款人集中在较低的收入段(小于20000);
  • 按时还款率越低,分布数量越少,多数用户100%守时;
  • 第三方信用分,大多集中在650到750之间;

风险评分
  • ProsperScore和ProsperRating在文档中并未有更多的概念介绍,我理解都为风险评估分数;评估评分越高,表示所评估对象表现越好,也即风险越小;两者从取值分布上比较均衡,呈现出中间多两头少的趋势;

单变量分析

你的数据集结构是什么?

此数据集包含113,937项贷款,每项贷款有 81个变量,包括贷款⾦额、借款利率(或利率)、当前贷款状态、借款⼈收⼊、借款⼈就业状态、借款⼈信⽤历史及最新⽀付信息。

你的数据集内感兴趣的主要特性有哪些?

我感兴趣的主要是风险收益两类特征:

  • 风险即前面提到的风险评估分数,ProsperScore和ProsperRating;
  • 收益即贷款利率相关,BorrowerRate,EstimatedReturn,也包括EstimatedLoss等;

你认为数据集内哪些其他特征可以帮助你探索兴趣特点?

  • 风险和收益,在理论上就有着联系,研究其相互关系可以直观的帮助理解;
  • 借款人(用户)的还款能力、还款意愿(行为),在一个完善的风控体系中,是会反映在风险评分中的,从而也进一步影响贷款额度和质量;本数据集中准备探索的有:IsBorrowerHomeowner,TradesNeverDelinquent..percentage.,IncomeRange,CreditScoreRangeUpper,等;

根据数据集内已有变量,你是否创建了任何新变量?

数据集内已有变量已经足够多,暂时未创建新变量;

在已经探究的特性中,是否存在任何异常分布?你是否对数据进行一些操作,如清洁、调整或改变数据的形式?如果是,你为什么会这样做?

  • 暂未发现异常分布;
  • 为了可视化展示的清洗,对部分离散特征的顺序进行了调整,如LoanOriginationQuarter,LoanStatus,IncomeRange;
  • 同时为了后续分析,我也把2009-07-01之后对贷款数据单独提取出来。

双变量绘图选择

风险评分 vs 收益相关特征
  • 风险评分与预期损失有很强的线性关系,随着评估分数的降低,预计损失升高;当评分为最低一级时,预期损失有可能很高,最高达到0.366;
  • 风险评分与贷款利率也有一定的线性关系,评分越低,贷款利率整体在上升;
  • 从预期收益来看,随着评分降低,由于贷款利率的上升,平均预期收益率也有所上升;但当评分降到最低一级时,由于预期损失的大幅增加,预期收益也将相应下降,部分数据显示还有负收益的可能。

风险评分 vs 贷款质量
  • 由下图可,见评分越低,贷款中还款逾期,违约,坏账的比例越高;

风险评分 vs 用户特征
  • 收入水平(还款能力):StatedMonthlyIncome
  • 按时还款比例(还款意愿):TradesNeverDelinquent..percentage.
  • 第三方征信分数(信用度):CreditScoreRangeUpper
  • 从上述三项借款人维度的特征来看,随着风险评分的升高,用户质量更好,其特征值分布也有着明显的升高趋势;
  • 一个奇怪的地方是,在风险评分最低一级,第三方征信分数分布反而不是最低;这其中存在第三方机构的征信评分在业务或评估标准上与Prosper有差别的可能。

用户特征 vs 贷款利率
  • 上述展示了风险评分和贷款利率、用户特征之间的关系;单独看用户特征和贷款利率之间的关系,可以得到:借款人还款能力、还款意愿、信用分越高,Prosper给出的贷款利率大概率上越低。

相关性分析
  • 下图抽样数据,综合列举了现有连续变量的相关性,可见风险评分ProsperRating..numeric.,预期损失EstimatedLoss,贷款利率BorrowerRate,三者之间的相关性最强;
  • 单独计算上述三个变量在全量数据的相关性,可见风险评分ProsperRating..numeric.与贷款利率BorrowerRate的相关性最强,负相关系数为-0.93

post_2009_no_na <- na.omit(ldp)
cor(as.numeric(post_2009_no_na$ProsperRating..numeric.), 
    post_2009_no_na$EstimatedLoss)
## [1] -0.8947862
cor(as.numeric(post_2009_no_na$ProsperRating..numeric.), 
    post_2009_no_na$BorrowerRate)
## [1] -0.9301399
cor(as.numeric(post_2009_no_na$EstimatedLoss), 
    post_2009_no_na$BorrowerRate)
## [1] 0.8302445

双变量分析

探讨你在这部分探究中观察到的一些关系。这些感兴趣的特性与数据集内其他特性有什么区别?

  • 从前面的分析,风险评分和贷款利率、预期损失、预期收益都呈负线性相关,这也印证了常识“风险越高,收益越大”;
  • 然而从预期收益看,虽然随评分降低收益增加,但增幅在缓慢减弱;当评分在最低一级时,由于预期损失的大幅增加,平均预期收益不增反降,出现净损失的概率反而增大;

你是否观察到主要特性与其他特性之间的有趣关系?

  • 主要特征与贷款质量,用户质量也有着紧密联系;
  • 风险评分直接预测了贷款质量:评分越低,贷款出现逾期、违约、坏账的概率上升;
  • 风险评分和用户质量呈线性正相关,评分越高,用户收入、按时还款率、第三方征信分数也都越高;
  • 从收益的角度,贷款利率总体与用户质量呈反比,当用户质量越高,Prosper给出的贷款利率大概率上越低。

你发现最强的关系是什么?

我发现的最强的线性关系,是风险评分ProsperRating..numeric.与贷款利率BorrowerRate,线性负相关系数-0.93

多变量绘图选择

贷款金额增长趋势 vs 房产
  • 随时间推进,每单贷款金额在逐步升高;
  • 在上述过程中,有房产的借款人普遍能比无房产的借款人贷到更多金额。

风险评分 vs 贷款利率
  • 这里把两类评分都考虑进来,ProsperScore和ProsperRating并不完全等价,但是增减的趋势一致;
  • 对于贷款利率,ProsperScore和ProsperRating两个特征同时也有相互促进的作用,当两者分数同时很低时,贷款利率水平达到最高,反之亦然;

收入水平 vs 贷款额度 vs 贷款质量
  • 由下图,从贷款总量分布来看,Prosper基本只贷给年收入$25000以上的用户,小于或者没有工作的借款人,成功贷款的几率很小;
  • 从贷款质量上看,收入越高,逾期+违约+坏账的总金额比例越低;

多变量分析

探讨你在这部分探究中观察到的一些关系。通过观察感兴趣的特性,是否存在相互促进的特性?

  • 部分特征间是存在相互促进特性的。前述我们得到风险评分ProsperRating与贷款利率强相关;而当把另外一个风险评分ProsperScore纳入分析时,两者虽然不完全等价,但是增减的趋势一致;
  • 另外一个相互促进的例子是贷款利率BorrowerRate和预期损失EstimatedLoss,当预期损失越高时,Prosper给出的贷款利率也会相应升高。

这些特性之间是否存在有趣或惊人的联系呢?

  • 前面提到的四类特性,风险、收益、贷款质量、用户质量,两两间都存在联系,这也驱动了金融科技领域的发展;
  • 风险和收益并存;(预期损失和预期收益正相关)
  • 风险评分预测贷款质量;(评分和坏账率负相关)
  • 用户质量影响风险评分,也影响贷款质量;(收入水平、按时还款行为,与评分正相关,与坏账率负相关)
  • 风控策略倾向于在低风险的区间最大化收益;(贷款大多交给高收入人群,以较低的贷款利率和低风险,来获取稳定收益)

选项:你是否创建过数据集的任何模型?讨论你模型的优缺点。

我认为这个数据集更多在于探索和理解,这里并未构建模型。


定稿图与总结

绘图一

描述一

  • 上图可以很好的看出风险和回报之间的关系。预期回报可以近似等于贷款利率-预期损失,整体上说风险越大(评分越低),预期回报升高。
  • 当评分太低时,由于预期损失的大幅增加,预期回报整体下降,回报为负的概率升高。

绘图二

描述二

  • 上图可看出Prosper自2009年7月以来的贷款业务增长情况,以及其对借款人有无房产的偏好区别。
  • 总体来说,单比贷款的贷款额度,随时间逐渐升高;而在这个过程中,贷款给有房产客户的金额、增幅,都普遍大于无房产客户。
  • 因此房产作为用户还款能力的一个维度,在一定程度上影响着Prosper的风控决策。

绘图三

描述三

  • 上图可看出,贷款金额基本都集中在年收入$25000以上的用户,小于或者没有工作的借款人,成功贷款的几率很小;
  • 从贷款质量上看,收入越高,逾期+违约+坏账的总金额比例越低;
  • 收入水平也是用户还款能力的一个重要维度,不仅直接反映出单比贷款的风险程度,也很大程度影响了Prosper的风控决策;
  • Prosper的风控策略倾向于在低风险的区间最大化收益;(贷款大多交给高收入人群,以较低的贷款利率和低风险,来获取稳定收益)

反思